home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / FredFish PD 314.adf / Zc / zcsrc.lzh / IOLib / stdio / fgetc.c < prev    next >
C/C++ Source or Header  |  1989-05-18  |  748b  |  41 lines

  1. #include <stdio.h>
  2.  
  3. int fgetc(fp)
  4.     register FILE *fp;
  5.     {
  6.     register int c, f, m;
  7.  
  8.     f = (fp->_flag &= ~_IORW);
  9.     if(!(f & _IOREAD) || (f & (_IOERR | _IOEOF)))
  10.         return(EOF);
  11.     if(fp->_base == NULL)    /* allocate a buffer if there wasn't one */
  12.         _getbuf(fp);
  13. _fgetc1:
  14.     if(--(fp->_cnt) < 0)
  15.         {
  16.         m = read(fp->_file, fp->_base, fp->_bsiz);
  17.         if(m <= 0)
  18.             {
  19.             fp->_flag |= ((m == 0) ? _IOEOF : _IOERR);
  20.             c = EOF;
  21.             goto _fgetc2;
  22.             }
  23.         fp->_cnt = (m - 1);
  24.         fp->_ptr = fp->_base;
  25.         }
  26.     c = *(fp->_ptr)++;
  27. _fgetc2:
  28.     return(c);
  29.     }
  30.  
  31. int fungetc(c, fp)
  32.     char c;
  33.     register FILE *fp;
  34.     {
  35.     if((fp->_flag & (_IOERR | _IOEOF))    /* error or eof */
  36.     || (fp->_ptr <= fp->_base))        /* or too many ungets */
  37.         return(EOF);
  38.     ++(fp->_cnt);
  39.     return(*--(fp->_ptr) = c);
  40.     }
  41.